package org.seedltd.upms.service.detection;

import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import java.util.Set;

import org.seedltd.core.base.BasePage;
import org.seedltd.core.base.IBaseService;
import org.seedltd.upms.model.detection.entity.DetectionProduct;
import org.seedltd.upms.model.detection.form.DetectionProductForm;
import org.seedltd.upms.model.detection.form.DetectionProductSearchForm;
import org.seedltd.upms.model.detection.vo.DetectionProductVO;
import org.springframework.web.multipart.MultipartFile;

/**
 * 产品管理业务接口
 * 
 * @author laizuan
 * @since 2021/07/30
 * @version 1.0
 */
public interface DetectionProductService extends IBaseService<DetectionProduct> {

    /**
     * 通过主键获取数据
     *
     * @param id
     *            主键
     * @return 数据
     */
    DetectionProductVO findById(Long id);

    @Override
    DetectionProduct getById(Serializable id);

    /**
     * 通过项目名称模糊匹配主键
     * 
     * @param productNames
     *            项目名称
     * @return
     */
    Set<Long> selectIdByProductName(String productNames);

    /**
     * 新增或修改产品
     * 
     * @param form
     *            产品数据
     * @param file
     *            产品图片
     * @return 主键
     */
    Long saveOrUpdate(DetectionProductForm form, MultipartFile file) throws IOException;

    /**
     * 删除数据
     *
     * @param id
     *            主键
     * @return 是否删除成功。 true: 成功，false:失败
     */
    boolean delete(Long id);

    /**
     * 列表查询
     * 
     * @param searchForm
     *            搜索条件
     * @return 列表数据
     */
    BasePage<DetectionProductVO> page(DetectionProductSearchForm searchForm);

    /**
     * 获取有效的产品列表
     * 
     * @return
     */
    List<DetectionProductVO> listValid( Integer advertising);

    /**
     * 获取产品详情
     * 
     * @param productId
     *            产品主键
     * @return 内容
     */
    String getDetailByProductId(Long productId);

    /**
     * 获取到有效的产品列表
     * 
     * @param ids
     *            产品主键
     * @return
     */
    List<DetectionProduct> listByIds(Set<Long> ids);
}